; boot扇区被加载到内存0x7c00处
; 告诉汇编器代码会被放到0x7c00处，从而保证代码中的标签的地址被正确编译，即加上0x7c00
[org 0x7c00]

jmp after_bpb
nop
times 59 db 0
after_bpb:
cli
jmp 0:real_start
real_start:
; 将段寄存器置0 防止随机值导致程序异常
xor ax, ax
mov ds, ax
mov es, ax
mov ss, ax
; 栈基址 由高位到低位增长 可用0x8000-0x7c00-512=512字节
mov bp, 0x8000
mov sp, bp
sti


mov bx, HELLO
call print
call print_nl

mov bx, GOODBY
call print
call print_nl

mov bx, HELLO1
call print
call print_nl

mov dx, 0x12ab
call print_hex
call print_nl

jmp $

%include "boot_sect_print.asm"

; 数据
GOODBY:
    db 'Goodbye', 0
HELLO:
    db 'Hello World', 0
HELLO1:
    db 'Hello World1', 0



times 510 - ($ - $$) db 0x00

dw 0xaa55
